home *** CD-ROM | disk | FTP | other *** search
- REM Sample Demo (adapted from Inside Macintosh)
- REM ©MacTutor 1987
- REM By Dave Kelly
-
- WINDOW OFF
- COORDINATE WINDOW
- DEF MOUSE=-1
- everyevent=-1:REM ALL events
- False=0:True=NOT False:doneflag=False
- REM Setup the EventRecord
- myEvent%=0:REM 'what' is first variable
- message&=0
- when&=0
- where&=0
- modifiers=0
- applemark=&H14
- whichwindow&=0
- DIM Rect%(3),windowrect%(3)
- charCodeMask&=VAL("&H000000FF")
- keyCodeMask&= VAL("&H0000FF00")
- FLUSHEVENTS
- GOSUB "SetUpMenus"
- WMgrPort&=PEEK LONG(&H9DE)
- PortRecttop=PEEK WORD(WMgrPort&+8)
- PortRectleft=PEEK WORD(WMgrPort&+10)
- PortRectbottom=PEEK WORD(WMgrPort&+12)
- PortRectright=PEEK WORD(WMgrPort&+14)
- dragtop=PortRecttop+24
- dragleft=PortRectleft+4
- dragbottom=PortRectbottom-4
- dragright=PortRectright-4
- CALL SETRECT(windowrect%(0),dragleft,dragtop+20,dragright-4,dragbottom-4)
- myWindow&=FN NEWWINDOW(0,windowrect%(0),"Sample Window",1,0,1,0,0)
- CALL SETPORT(myWindow&)
- CALL GETPORT(GrfPtr&)
- txRect1&=PEEK LONG(GrfPtr&+16)
- txRect2&=PEEK LONG(GrfPtr&+20)
- CALL INSETRECT(txRect1&,4,2)
- textH&=FN TENEW(txRect1&,txRect1&)
-
- "EventLoop": REM Main Event Loop
- DO
- CALL SYSTEMTASK
- CALL TEIDLE(textH&)
- CALL SETRECT(Rect%(0),PEEK WORD (GrfPtr&+16),PEEK WORD (GrfPtr&+18),PEEK WORD (GrfPtr&+20),PEEK WORD (GrfPtr&+22))
- click=MOUSE(0):xpos=MOUSE(1):ypos=MOUSE(2)
- InRectangle=FN PTINRECT(xpos,Rect%(0))
- IF InRectangle THEN CURSOR 1 ELSE CURSOR 0
- LONG IF FN GETNEXTEVENT(everyevent,myEvent%)
- SELECT myEvent%
- CASE 0 :REM No Event
- CASE 1 :REM mousedown
- wResult=FN FINDWINDOW(where&,whichwindow&)
- SELECT wResult
- CASE 0 :REM inDesk (do nothing)
- CASE 1 :REM inMenuBar
- mResult&=FN MENUSELECT(where&)
- GOSUB "DoCommand"
- CASE 2 :REM inSysWindow
- CALL SYSTEMCLICK(myEvent%,whichwindow&)
- CASE 3 :REM inContent
- LONG IF whichwindow& <> FN FRONTWINDOW
- CALL SELECTWINDOW(whichwindow&)
- XELSE
- CALL GLOBALTOLOCAL(where&)
- boolean=FN BITAND(modifiers,512)<>0
- CALL TECLICK(where&,boolean,textH&)
- END IF
- CASE 4 :REM inDrag
- LONG IF whichwindow&<>FN FRONTWINDOW
- CALL SELECTWINDOW(whichwindow&)
- XELSE
- CALL DRAGWINDOW(whichwindow&, where&,dragtop)
- END IF
-
- CASE 5 :REM inGrow
- CASE 6 :REM inGoAway
- END SELECT
- CASE 2 :REM mouseup
- CASE 3,5 :REM keydown or autokey
- theChar&=FN BITAND(message&,charCodeMask&)
- LONG IF FN BITAND(modifiers,256)<>0
- mResult&=FN MENUKEY(theChar&)
- GOSUB "DoCommand"
- XELSE
- CALL TEKEY(theChar&,textH&)
- END IF
- CASE 4 :REM keyup
- CASE 6 :REM updateEvt
- CALL BEGINUPDATE(message&)
- CALL ERASERECT(txRect1&)
- CALL TEUPDATE(txRect1&,textH&)
- CALL ENDUPDATE(message&)
- CASE 7 :REM diskEvt
- CASE 8 :REM activateEvt
- LONG IF FN BITAND(modifiers,1)<>0
- CALL TEACTIVATE(textH&)
- CALL DISABLEITEM(Mhndl2&,1)
- XELSE
- CALL TEDEACTIVATE(textH&)
- CALL ENABLEITEM(Mhndl2&,1)
- END IF
- CASE 10 :REM networkEvt
- CASE 11 :REM driverEvt
- CASE 12 :REM app1Evt
- CASE 13 :REM app2Evt
- CASE 14 :REM app3Evt
- CASE 15 :REM app4Evt
- CASE ELSE
- END SELECT
- END IF
- UNTIL doneflag
- END
- "SetUpMenus"
- APPLE MENU "About Sample"
- MENU 1,0,1,"File"
- MENU 1,1,1,"Quit/Q"
- Mhndl1&=FN GETMHANDLE(1)
- EDIT MENU 2
- Mhndl2&=FN GETMHANDLE(130)
- Mhndl0&=FN GETMHANDLE(255)
- RETURN
- "DoCommand"
- theMenu=FN HIWORD(mResult&)
- theItem=FN LOWORD(mResult&)
- SELECT theMenu
- CASE 255
- GOSUB "appleID"
- CASE 1
- GOSUB "fileID"
- CASE 2
- GOSUB "editID"
- END SELECT
- CALL HILITEMENU(0)
- RETURN
- "appleID"
- LONG IF theItem=1
- WINDOW 5,"",(100,100)-(400,250),-2
- TEXT 0,12,0,0
- PRINT @(2,2)"Sample adapted from Inside Macintosh"
- PRINT @(10,3)"by"
- PRINT @(8,4)"Dave Kelly"
- PRINT @(6,5)"©MacTutor, 1987"
- MOUSE ON
- DO
- x=MOUSE(0)
- outsiderect=(MOUSE(1)<0 OR MOUSE(1)>300 OR MOUSE(2)<0 OR MOUSE(2)>150)
- UNTIL x<>0 AND NOT (outsiderect)
- MOUSE OFF
- WINDOW CLOSE 5
- XELSE
- CALL GETITEM(Mhndl0&,theItem,Var$)
- mrefNum=FN OPENDESKACC(Var$)
- CALL SETPORT(myWindow&)
- END IF
- RETURN
- "fileID"
- doneflag=True
- RETURN
- "editID"
- LONG IF NOT FN SYSTEMEDIT(theItem-1)
- SELECT theItem
- CASE 1:REM undo command
- CASE 3:REM cut command
- CALL TECUT(textH&)
- CASE 4:REM copy command
- CALL TECOPY(textH&)
- CASE 5:REM paste command
- CALL TEPASTE(textH&)
- CASE 6:REM clear command
- CALL TEDELETE(textH&)
- END SELECT
- END IF
- RETURN
-